Introdução

Ao longo do semestra fomos monitorando o a florada na área anteriormente estuda. Sempre observando as condições climáticas. Mas conhecimento prévio sobre a culura do café, que fisiologicamente, ocorrem 3 floradas.

Objetivo

O objetivo da prática é obter dados de levantamento GNSS das lavouras de café e monitorar a segunda floração com drone e câmera RGB e térmica (flyr).

Metodologia

Os dados com coordenadas dos pontos de controle no campo são preparados para utilização em um sistema de correção geométrica de imagens. Os dados de temperatura in situ foram obtidos com termômetro em alguns pontos do campo simultaneamente à coleta de dados do drone. Os dados de temperatura foram georreferenciados com GNSS. A coleta de dados foi realizada no dia da terceira floração, dia 01/11/2023, por volta das 11h59, horário de Brasília. Na mesma área antes observada. O painel de cultivares da UFLA.

Habilitando os Pacotes do R

Para a relização da tarefa foram utilizados os pacotes a seguir

library(terra)
## terra 1.7.62
library(viridis)
## Loading required package: viridisLite

Manipulação de dados vetoriais pontuais

No pacote terra existe a definição de um conjunto de classes para representar dados espaciais. Existem uma série de classes com nomes que começam com Spat.Para dados vetoriais, a classe utilizada é SpatVector. Essas classes representam geometrias, bem como atributos (variáveis) que descrevem as geometrias. Na linguagem R é possível criar objetos SpatVector a partir de pontos de levantamento GNSS realizados no painel de cultivares da UFLA.

Pontos Espaciais com Atributos

Os dados de longitude e latitude foram medidos em campo, utilizando o sistema GNSS, na região central dos pontos de controle. Os pontos de medição de temperatura do ar com termômetro digital foram pré definidos e após unidos em um único objeto com a função cbind. Criando então os objetos “lat” e “lon”, para as respectivas latitudes e longitudes de cada ponto.

lat <- c(7652768.185, 7652834.197, 7652805.523, 7652782.826, 7652742.534)
lon <- c(502994.523, 503063.957, 503088.414, 503039.389, 503022.767)
lonlat <- cbind(lon, lat)


Em seguida os pontos de temperatura para cada latitude e longitude nomeando os objetos como “tlat” e “tlon”. E também utilizando a função cbind para unir temperaturas da latitude e longitude.

tlat <- c(7652744.450, 7652748.671, 7652752.566, 7652752.925, 7652754.646, 7652756.400, 7652747.828)
tlon <- c(503017.621, 503017.033, 503015.326, 503018.141, 503015.655, 503011.592, 503007.671)
tlonlat <- cbind(tlon, tlat)


Os dados de longitude e latitude foram convertidos em SpatVector com a função vect.

pts <- vect(lonlat)

E na sequência os atributos desse novo objeto criado.

pts
##  class       : SpatVector 
##  geometry    : points 
##  dimensions  : 5, 0  (geometries, attributes)
##  extent      : 502994.5, 503088.4, 7652743, 7652834  (xmin, xmax, ymin, ymax)
##  coord. ref. :

Utilizando a função vect para os dados de temperatura.

tpts <- vect(tlonlat)

Os atributos do objeto criado.

tpts
##  class       : SpatVector 
##  geometry    : points 
##  dimensions  : 7, 0  (geometries, attributes)
##  extent      : 503007.7, 503018.1, 7652744, 7652756  (xmin, xmax, ymin, ymax)
##  coord. ref. :

Com a função geom é possível observar os dados contidos no objetos que foram criados pts e tpts.
Abaixo os pontos de controle.

geom(pts)
##      geom part        x       y hole
## [1,]    1    1 502994.5 7652768    0
## [2,]    2    1 503064.0 7652834    0
## [3,]    3    1 503088.4 7652806    0
## [4,]    4    1 503039.4 7652783    0
## [5,]    5    1 503022.8 7652743    0


Abaixo os dados de Temperatura.

geom(tpts)
##      geom part        x       y hole
## [1,]    1    1 503017.6 7652744    0
## [2,]    2    1 503017.0 7652749    0
## [3,]    3    1 503015.3 7652753    0
## [4,]    4    1 503018.1 7652753    0
## [5,]    5    1 503015.7 7652755    0
## [6,]    6    1 503011.6 7652756    0
## [7,]    7    1 503007.7 7652748    0


Para atribuir o sistema de referência de coordenadas WGS 84/UTM zona 23S (EPSG:32723). O argumento crs é utilizado.Iniciando o processo com os pontos de controle o que será aplicado também para os dados de temperatura.

pts <- vect(lonlat, crs = "EPSG:32723")

Verificando os atributos do objeto.

pts
##  class       : SpatVector 
##  geometry    : points 
##  dimensions  : 5, 0  (geometries, attributes)
##  extent      : 502994.5, 503088.4, 7652743, 7652834  (xmin, xmax, ymin, ymax)
##  coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)

Utilizando o mesmo argumento para os dados de temperatura.

tpts <- vect(tlonlat, crs = "EPSG:32723")

Verificando os atributos do objeto

tpts
##  class       : SpatVector 
##  geometry    : points 
##  dimensions  : 7, 0  (geometries, attributes)
##  extent      : 503007.7, 503018.1, 7652744, 7652756  (xmin, xmax, ymin, ymax)
##  coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723)


Utilizando a Função crs, aplicada ao objeto é possivel obter mais informações sobre o Sistema de Coordenadas. Utili

crs(tpts)
## [1] "PROJCRS[\"WGS 84 / UTM zone 23S\",\n    BASEGEOGCRS[\"WGS 84\",\n        DATUM[\"World Geodetic System 1984\",\n            ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n                LENGTHUNIT[\"metre\",1]]],\n        PRIMEM[\"Greenwich\",0,\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n        ID[\"EPSG\",4326]],\n    CONVERSION[\"UTM zone 23S\",\n        METHOD[\"Transverse Mercator\",\n            ID[\"EPSG\",9807]],\n        PARAMETER[\"Latitude of natural origin\",0,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8801]],\n        PARAMETER[\"Longitude of natural origin\",-45,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8802]],\n        PARAMETER[\"Scale factor at natural origin\",0.9996,\n            SCALEUNIT[\"unity\",1],\n            ID[\"EPSG\",8805]],\n        PARAMETER[\"False easting\",500000,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8806]],\n        PARAMETER[\"False northing\",10000000,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8807]]],\n    CS[Cartesian,2],\n        AXIS[\"(E)\",east,\n            ORDER[1],\n            LENGTHUNIT[\"metre\",1]],\n        AXIS[\"(N)\",north,\n            ORDER[2],\n            LENGTHUNIT[\"metre\",1]],\n    USAGE[\n        SCOPE[\"Engineering survey, topographic mapping.\"],\n        AREA[\"Between 48°W and 42°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil.\"],\n        BBOX[-80,-48,0,-42]],\n    ID[\"EPSG\",32723]]"

Dados de Altitude

Dados de atributos como altitude e um número de identificação para cada ponto foram adicionados aos dados criando um data.frame.

alt <- c(937.827, 938.115, 941.412, 940.140, 940.995)
df <- data.frame(ID = 1:nrow(lonlat), altitude = alt)

Objeto criando com a altitude e a identificação.

df
##   ID altitude
## 1  1  937.827
## 2  2  938.115
## 3  3  941.412
## 4  4  940.140
## 5  5  940.995


Criando o data frame com os dados de temperatura e altitude

talt <- c(940.590, 940.263, 940.052, 940.173, 940.084, 939.844, 939.747)
t <- c(31.5, 29.1, 34.3, 29.7, 33.5, 32.3, 40.7)
tdf <- data.frame(ID = 1:nrow(tlonlat), altitude = talt, temperatura = t)


Visializando o data frame,

tdf
##   ID altitude temperatura
## 1  1  940.590        31.5
## 2  2  940.263        29.1
## 3  3  940.052        34.3
## 4  4  940.173        29.7
## 5  5  940.084        33.5
## 6  6  939.844        32.3
## 7  7  939.747        40.7


Abaixo foi combinado o data.frame criado com o objeto SpatVector de pontos espaciais. Primeiro com os pontos de controle e após com os dados de temperatura.

pt <- vect(lonlat, atts = df, crs = "EPSG:32723")

Verificando os atributos do objeto.

pt
##  class       : SpatVector 
##  geometry    : points 
##  dimensions  : 5, 2  (geometries, attributes)
##  extent      : 502994.5, 503088.4, 7652743, 7652834  (xmin, xmax, ymin, ymax)
##  coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723) 
##  names       :    ID altitude
##  type        : <int>    <num>
##  values      :     1    937.8
##                    2    938.1
##                    3    941.4


Mesma função utilizando os dados de temperatura.

tpt <- vect(tlonlat, atts = tdf, crs = "EPSG:32723")

Verificando os atributos do objeto

tpt
##  class       : SpatVector 
##  geometry    : points 
##  dimensions  : 7, 3  (geometries, attributes)
##  extent      : 503007.7, 503018.1, 7652744, 7652756  (xmin, xmax, ymin, ymax)
##  coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723) 
##  names       :    ID altitude temperatura
##  type        : <int>    <num>       <num>
##  values      :     1    940.6        31.5
##                    2    940.3        29.1
##                    3    940.1        34.3


## Exportando os Pontos de Controle e Temperatura Os objetos da classe SpatVector podem ser exportados para um diretório localde interesse com a função writeVector.
Exportando os Pontos de Controle

writeVector(pt, "/home/vitor/Disciplinas_especiais_UFLA/geomatica/tarefa_04/pt.shp", overwrite=TRUE)


Exportando os dados de Temperatura

writeVector(tpt, "/home/vitor/Disciplinas_especiais_UFLA/geomatica/tarefa_04/tpt.shp", overwrite=TRUE)

Mapeando os pontos criados

Os pontos criados foram mapeados com a função plot.
Pontos de Controle

plot(pt, col = "blue")


Temperatura nos Pontos de Controle

plot(tpt, col = "red")

As duas informações mapeadas

Pontos de Controle na cor azul, e temperatura na cor vermelha.

plot(pt, col = "blue")
plot(tpt, add = T, col = "red")

Referencia no RGB

Imagem RGB da terceira florada com referência dos Pontos de Controle e Temperatura.
Endereço da imagem já salva em servidor local.

rgb_imagem <- rast("/home/vitor/Disciplinas_especiais_UFLA/geomatica/imagem_drone/Florada_03/3_Florada_03112023/Campus-Ufla-03-11-2023-all-RGB/odm_orthophoto/odm_orthophoto.tif")


Locais onde foram realizados os Pontos de Controle na cor azul e os pontos de Temperatura em vermelho.

# Plot da imagem raster RGB
plotRGB(rgb_imagem, r = 1, g = 2, b = 3)

# Adiciona os pontos de controle na cor azul
points(pt, col = "blue")

# Adiciona a temperatura na cor vermelha
points(tpt, col = "red")

Análise Geométrica de dados Geográficos

Uma análise geométrica de dados geométricos é utilizada para criar um arquivo de contorno da área de interesse a partir de conversões de vértices de pontos definidos por pontos de controle 1,2,3,5 ao redor da lavoura cafeeira em polígonos.

No R, um “objeto array” refere-se a uma estrutura de dados multidimensional que pode conter elementos de um único tipo de dado. Ao contrário de matrizes bidimensionais, que possuem duas dimensões (linhas e colunas), arrays podem ter mais de duas dimensões. Um array pode ser visto como uma generalização de uma matriz. Os valores de longitude e de latitude dos vértices 1,2,3,5 são organizados em um objeto array.

lonp <- c(502994.523, 503063.957, 503088.414, 503022.767)
latp <- c(7652768.185, 7652834.197, 7652805.523, 7652742.534)
lonlatp <- cbind(lon, lat)


Um banco de dados com identificador de atributos de polígonos criado com a função data.frame.

dfp <- data.frame(ID = 1)


Uma função vetorial é utilizada para criar um polígono espacial com atributos ao redor da lavoura do painel de cultivares de café da UFLA.

pol <- vect(lonlatp, "polygons", atts = dfp, crs= "epsg:32723")


Verificando as propiedades do objeto criado.

pol
##  class       : SpatVector 
##  geometry    : polygons 
##  dimensions  : 1, 1  (geometries, attributes)
##  extent      : 502994.5, 503088.4, 7652743, 7652834  (xmin, xmax, ymin, ymax)
##  coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723) 
##  names       :    ID
##  type        : <num>
##  values      :     1


O poligno será exportado para um diretório local utilizando a função “writeVector”

writeVector(pol, "/home/vitor/Disciplinas_especiais_UFLA/geomatica/tarefa_04//pol.shp", overwrite=TRUE)

Imagens Ortomoretificadas RGB e Térmica

O ortomosaico obtido em levantamento e processado no Software Open Drone Map é importado do servidor local para o R com a função “rast”.

rgb_03_11_23 <- rast("/home/vitor/Disciplinas_especiais_UFLA/geomatica/imagem_drone/Florada_03/3_Florada_03112023/Campus-Ufla-03-11-2023-all-RGB/odm_orthophoto/odm_orthophoto.tif")


Verificando as propriedades da imagem.

rgb_03_11_23
## class       : SpatRaster 
## dimensions  : 4070, 4223, 4  (nrow, ncol, nlyr)
## resolution  : 0.04999767, 0.04999282  (x, y)
## extent      : 502940, 503151.1, 7652677, 7652880  (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723) 
## source      : odm_orthophoto.tif 
## names       : red, green, blue, odm_orthophoto_4 
## min values  :   0,     0,    0,               ?  
## max values  : 255,   255,  255,               ?


Mapear Composição Colorida

Composições coloridas são obtidas com a função plotRGB. A partir das propiedades da imagem podemos verificar qual banda é o Red, green e blue. E a partir daí fazer a composição. Um realce linear é aplicado a dados de imagem.

plotRGB(rgb_03_11_23, r= 1, g= 2, b=3, stretch = "lin")

Composição colorida RGB de ortomosaico georreferenciado obtido com drone no dia 3 de novembro de 2023. A imagem apresenta uma alta exposição de luz sendo necessário conhecimentos sobre os príncipios da fotografia, para regular adequadamente o equipamento. Principalmente a exposição de luz.

Efetuando Zoom na Imagem

A função “draw” pode ser utilizada para definir uma região em que será dado o zoom na imagem. Por se tratar de um drone, com boa resulução espacial. Esse recurso pode ser interressante para verificar alguns atributos especificos na lavoura.

e <- ext(503035.860092809, 503066.697601027, 7652773.41085155, 7652801.78135911)
plotRGB(rgb_03_11_23, r = 1, g = 2, b = 3, ext = e, stretch = "lin")

A partir do objeto “e”, foram definidas 4 coordenadas x e y para que fosse aplicado esse zoom. Pela imagem ampliada, é possível verificar falhas no plantio e solo exposto em alguns pontos da lavoura.

Modelo Digital de Elevação da Superfície

O modelo digital de elevação da superfície criado a partir do levantamento com sobreposição de imagens é importado no R com a função rast. Lembrando que as imagens foram ortoretificadas a partir do Software Open Drone Map.

alt_03_11_23 <- rast("/home/vitor/Disciplinas_especiais_UFLA/geomatica/imagem_drone/Florada_03/3_Florada_03112023/Campus-Ufla-03-11-2023-all-RGB/odm_dem/dsm.tif")


Verificando as propiedades da imagem.

alt_03_11_23
## class       : SpatRaster 
## dimensions  : 4069, 4222, 1  (nrow, ncol, nlyr)
## resolution  : 0.05, 0.05  (x, y)
## extent      : 502940, 503151.1, 7652677, 7652880  (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723) 
## source      : dsm.tif 
## name        : dsm


Mapear Modelo Digital de Elevação da Superfície

O modelo digital de elevação da superfície é mapeado com função plot. Uma paleta é utilizada no mapeamento para verificar a diferença.

#Imagem como modelo digital de elevação
plot(alt_03_11_23, col = topo.colors(256))

#Pontos de controle na cor azul
points(pt, col = "black")

# Pontos de temperatura na cor vermelha
points(tpt, col = "red")


Pontos de temperatura na cor vermelha e pontos de controle na cor preta.

Efetuando o zoom na mesma área definida com o objeto “e” acima. O modelo digital de elevação da superfície é mapeado com zoom.

plot(alt_03_11_23, col = topo.colors(256), ext = e)


Georreferenciamento e Análise Geométrica de Imagem Termal

O ortomosaico termal obtido no mesmo levantamento de dados é importado no R com a função “rast”, utilizando o pacote terra. Os pontos de controle não foram usados para produzir o ortomosaico. Tornando-se necessário explorar técnicas de análise geométrica de imagens para realizar o georreferenciamento da imagem termal. Os resultados de monitoramento com a câmera flyr são convertidos em um modelo de dados RGB ao importar os dados com a função rast.

flyr_03_11_23 <- rast("/home/vitor/Disciplinas_especiais_UFLA/geomatica/imagem_drone/Florada_03/3_Florada_03112023/Campus-Ufla-03-11-2023-all-Termal/odm_orthophoto/odm_orthophoto.tif")


Verificando as propriedades da imagem Termal

flyr_03_11_23
## class       : SpatRaster 
## dimensions  : 1911, 2022, 4  (nrow, ncol, nlyr)
## resolution  : 0.06956647, 0.06956909  (x, y)
## extent      : 502968.9, 503109.5, 7652719, 7652852  (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 23S (EPSG:32723) 
## source      : odm_orthophoto.tif 
## names       : red, green, blue, odm_orthophoto_4 
## min values  :   0,     0,    0,               ?  
## max values  : 255,   237,  255,               ?


A imagem termal é mapeada com a função plotRGB. Os pontos de temperatura levantados na lavoura são mapeados com a função points.

#Imagem Termal
plotRGB(flyr_03_11_23, r = 1, g = 2, b = 3)

#Pontos de temperatura cor braca
points(tpt, col = "white", cex = 2)

#Pontos de Temperatura numerados cor preta
text(tpt, halo=TRUE, col="black", hw=0.2)

Comparando com a imagem do modelo de elevação digital, os pontos de temperatura aparecem fora do ponto correto sendo necessário aplicar uma correção.